Networks enable computers and other devices to communicate. For example, networks can carry data representing video, audio, e-mail, and so forth. Typically, data sent across a network is divided into smaller messages known as packets. By analogy, a packet is much like an envelope you drop in a mailbox. A packet typically includes “payload” and a “header”. The packet's “payload” is analogous to the letter inside the envelope. The packet's “header” is much like the information written on the envelope itself. The header can include information to help network devices handle the packet appropriately. For example, the header can include an address that identifies the packet's destination.
A given packet may “hop” across many different intermediate network devices (e.g., “routers”, “bridges” and “switches”) before reaching its destination. These intermediate devices often perform a variety of packet processing operations. For example, intermediate devices often perform operations to determine how to forward a packet further toward its destination or determine a quality of service to use in handling the packet.
As network connection speeds increase, the amount of time an intermediate device has to process a packet continues to dwindle. To achieve fast packet processing, many devices feature dedicated, “hard-wired” designs such as Application Specific Integrated Circuits (ASICs). These designs, however, are often difficult to adapt to emerging networking technologies and communication protocols.
To combine flexibility with the speed often associated with an ASIC, some network devices feature programmable network processors. Network processors enable software engineers to quickly reprogram network processor operations.
Often, again due to the increasing speed of network connections, the time it takes to process a packet greatly exceeds the rate at which the packets arrive. Thus, the architecture of some network processors features multiple processing engines that process packets simultaneously. For example, while one engine determines how to forward one packet, another engine determines how to forward a different one. While the time to process a given packet may remain the same, processing multiple packets at the same time enables the network processor to keep apace the deluge of arriving packets.